package com.reisen.common;


import lombok.Data;

/**
 * 接口返回对象封装 - Result
 *
 * @author: Reisen
 * @date: 2025-06-15
 */
@Data
public class R<T> {

    /**
     * 状态码
     */
    private int code;

    /**
     * 状态消息
     */
    private String msg;

    /**
     * 数据
     */
    private T data;

    public R(int code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public static R ok(Object data) {
        return new R(0, "成功", data);
    }

    public static R ok(String msg, Object data) {
        return new R(1, msg, data);
    }

    public static R ok(String msg) {
        return new R(1, msg, Boolean.TRUE);
    }

    public static R error(String msg) {
        return new R(0, msg, Boolean.FALSE);
    }

    public static R error(int code, String msg) {
        return new R(code, msg, Boolean.FALSE);
    }
}
public interface SongService {

    /**
     * 添加歌曲
     *
     * @param song 歌曲信息
     * @return 结果
     */
    Boolean insert(Song song);

    /**
     * 修改歌曲
     *
     * @param song 歌曲信息
     * @return 删除结果
     */
    Boolean update(Song song);

    /**
     * 删除歌曲
     *
     * @param id 歌曲id
     * @return 删除结果
     */
    Boolean delete(Integer id);

    /**
     * 根据歌曲id查询歌曲对象
     *
     * @param id 歌曲id
     * @return 歌曲
     */
    Song selectByPrimaryKey(Integer id);

    /**
     * 查询所有歌曲
     *
     * @return 歌曲列表
     */
    List<Song> allSong();

    /**
     * 根据歌手名字精确查询歌曲
     *
     * @param name 歌手名
     * @return 歌曲列表
     */
    List<Song> songOfName(String name);

    /**
     * 根据歌手名字模糊查询歌曲
     *
     * @param name 歌手名称
     * @return 歌曲列表
     */
    List<Song> likeSongOfName(String name);

    /**
     * 根据歌手id查询歌曲
     *
     * @param singerId 歌手id
     * @return 歌曲列表
     */
    List<Song> songOfSingerId(Integer singerId);
}

